home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / windial.c < prev    next >
C/C++ Source or Header  |  1996-11-02  |  15KB  |  605 lines

  1. #if 0
  2.  
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6. #include <mydial.h>
  7.  
  8. #include "global.h"
  9. #include "dial.h"
  10. #include "obj.h"
  11. #include "windows.h"
  12. #include "windial.h"
  13.  
  14.  
  15. /* exportierte Variablen *****************************************************/
  16.  
  17. /*****************************************************************************/
  18.  
  19. #define BACKDROP                0x2000        /* MagiC2  */
  20. /* Damit das Dialogfenster ein BACKDROP gemeldet bekommt und ggf. den Cursor
  21.  * abschalten kann!!
  22. */
  23.  
  24. #define KIND    (NAME|MOVER|BACKDROP)
  25. #define FLAGS    (WI_REDRAW)
  26.  
  27. LOCAL WORD         find_obj         (OBJECT *tree, WORD start_obj, WORD which);
  28. LOCAL WORD        fm_inifld         (OBJECT *tree, WORD start_fld);
  29. LOCAL VOID        wi_draw            (WINDOWP w, CONST RECT *r);
  30. LOCAL VOID        wi_click            (WINDOWP w, MKINFO *mk);
  31. LOCAL VOID        wi_unclick        (WINDOWP w);
  32. LOCAL BOOLEAN    wi_key            (WINDOWP w, MKINFO *mk);
  33. LOCAL VOID        wi_top            (WINDOWP window);
  34. LOCAL VOID        wi_ontop            (WINDOWP window);
  35. LOCAL VOID        wi_untop            (WINDOWP window);
  36. LOCAL VOID        wi_bottom        (WINDOWP window);
  37. LOCAL VOID        wi_close            (WINDOWP window);
  38.  
  39.  
  40. /* Dialogverwaltung **********************************************************/
  41. #define EDINIT         1
  42. #define EDCHAR         2
  43. #define EDEND            3
  44.  
  45. LOCAL WORD find_obj (OBJECT *tree, WORD start_obj, WORD which)
  46. {
  47.     WORD obj, flag, theflag, inc;
  48.  
  49.     obj = 0;
  50.     flag = EDITABLE;
  51.     inc = 1;
  52.  
  53.     switch (which)
  54.     {
  55.         case FMD_BACKWARD:
  56.             inc = -1;                                         /* fall thru */
  57.         case FMD_FORWARD:
  58.             obj = start_obj + inc;
  59.             break;
  60.         case FMD_DEFLT:
  61.             flag = DEFAULT;
  62.             break;
  63.     }
  64.  
  65.     while (obj >= 0)
  66.     {
  67.         theflag = tree[obj].ob_flags;
  68.  
  69.         if (theflag & flag)
  70.             return (obj);
  71.  
  72.         if (theflag & LASTOB)
  73.             obj = -1;
  74.         else
  75.             obj += inc;
  76.     }
  77.  
  78.     return (start_obj);
  79. }
  80.  
  81.  
  82. LOCAL WORD fm_inifld (OBJECT *tree, WORD start_fld)
  83. {
  84.     if (!start_fld)                    /* position cursor on    the starting field */
  85.         start_fld = find_obj(tree, 0, FMD_FORWARD);
  86.     return (start_fld);
  87. }
  88.  
  89. /*****************************************************************************/
  90.  
  91. LOCAL VOID wi_click(WINDOWP w, MKINFO *mk)
  92. {
  93.     DIALP     d_ptr;
  94.     WORD        cont, wbox;
  95.     RECT        work;
  96.     TEDINFO    *ted;
  97.     
  98.     d_ptr = get_dial(w->link);
  99.     cont = TRUE;
  100.  
  101.     /* position cursor on    the selected editing field */
  102.     if ((d_ptr->next_obj != 0) && (d_ptr->edit_obj != d_ptr->next_obj))
  103.     {
  104.           d_ptr->edit_obj = d_ptr->next_obj;
  105.           d_ptr->next_obj = 0;
  106.           obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDINIT, FALSE, &d_ptr->edit_obj, w->handle);
  107.     }
  108.     d_ptr->next_obj = objc_find (d_ptr->tree, ROOT, MAX_DEPTH, mk->mox, mk->moy);
  109.     if (d_ptr->next_obj == NIL)
  110.          {
  111.               mybeep();
  112.               d_ptr->next_obj = 0;
  113.          }
  114.          else
  115.     {
  116.         if (d_ptr->edit_obj && (d_ptr->tree[d_ptr->edit_obj].ob_type & 0xff) == G_USERDEF)
  117.         {
  118.             dial_drawcursor (d_ptr->tree, d_ptr->edit_obj, d_ptr->edit_idx, w->handle);
  119.             cont = form_Button (w->handle, d_ptr->tree, d_ptr->next_obj, mk->breturn, &d_ptr->next_obj, (SL_CB)NULL);
  120.             dial_drawcursor (d_ptr->tree, d_ptr->edit_obj, d_ptr->edit_idx, w->handle);
  121.         }
  122.         else
  123.             cont = form_Button (w->handle, d_ptr->tree, d_ptr->next_obj, mk->breturn, &d_ptr->next_obj, (SL_CB)NULL);
  124.  
  125.         if ((d_ptr->tree[d_ptr->edit_obj].ob_flags & EXIT) && d_ptr->edit_obj != d_ptr->next_obj && cont)
  126.         {
  127.             d_ptr->next_obj = d_ptr->edit_obj;
  128.             cont = d_ptr->edit_obj = FALSE;
  129.         }
  130.         if (cont && (d_ptr->tree[d_ptr->next_obj].ob_flags & EDITABLE))
  131.         {
  132.             if (d_ptr->next_obj != d_ptr->edit_obj)
  133.             {
  134.                 obj_edit (d_ptr->tree, d_ptr->edit_obj, mk->kstate, 0, &d_ptr->edit_idx, EDEND, FALSE, &d_ptr->edit_obj, w->handle);
  135.                 d_ptr->edit_obj = d_ptr->next_obj;
  136.                 d_ptr->next_obj = 0;
  137.             }
  138.             objc_rect(d_ptr->tree, d_ptr->edit_obj, &work, FALSE);
  139.  
  140.             ted = (TEDINFO *)get_obspec (d_ptr->tree, d_ptr->edit_obj);
  141.  
  142.             if (ted->te_font == SMALL)
  143.                 wbox = 6;
  144.             else
  145.                 wbox = sys_wchar;
  146.  
  147.             if (ted->te_just != TE_LEFT)
  148.             {
  149.                 work.w = work.w - dial_curspos (d_ptr->tree, d_ptr->edit_obj, min (ted->te_tmplen - 1, d_ptr->tree[d_ptr->edit_obj].ob_width / wbox), wbox);
  150.                 if (ted->te_just == TE_CNTR)
  151.                     work.w /= 2;
  152.                 work.x += work.w;
  153.             }
  154.             d_ptr->edit_idx = dial_charpos (d_ptr->tree, d_ptr->edit_obj, mk->mox - work.x, wbox);
  155.             d_ptr->edit_obj = dial_setcpos (d_ptr->tree, d_ptr->edit_obj, &d_ptr->edit_idx);
  156.         }
  157.     }
  158.     if ((!cont) || ((d_ptr->next_obj != 0) && (d_ptr->next_obj != d_ptr->edit_obj)))
  159.         obj_edit(d_ptr->tree, d_ptr->edit_obj, mk->kstate, 0, &d_ptr->edit_idx, EDEND, FALSE, &d_ptr->edit_obj, w->handle);
  160.     if (!cont)
  161.     {
  162.         d_ptr->exit_obj = d_ptr->next_obj;
  163.         d_ptr->proc(d_ptr);
  164.     }
  165. }
  166.  
  167. LOCAL VOID wi_unclick(WINDOWP w)
  168. {
  169. }
  170.  
  171. LOCAL BOOLEAN wi_key(WINDOWP w, MKINFO *mk)
  172. {
  173.     UWORD     knorm, kr;
  174.     DIALP     d_ptr;
  175.     WORD        cont;
  176.             
  177.     d_ptr = get_dial(w->link);
  178.     
  179.     knorm = mk->kreturn;
  180.     kr = nkc_n2gem(mk->kreturn);
  181.     cont = TRUE;
  182.     
  183.     if ((d_ptr->tree[d_ptr->edit_obj].ob_flags & FLAGS15) && (knorm == (NKF_FUNC|NK_UP) 
  184.         && find_prev (d_ptr->tree, d_ptr->edit_obj) != NIL) || (knorm == (NKF_FUNC|NK_DOWN) 
  185.         && find_next (d_ptr->tree, d_ptr->edit_obj) != NIL))
  186.     {
  187.         obj_edit (d_ptr->tree, d_ptr->edit_obj, mk->kstate, kr, &d_ptr->edit_idx, EDCHAR, FALSE, &d_ptr->edit_obj, w->handle);
  188.         d_ptr->next_obj = d_ptr->edit_obj;
  189.         kr = 0;
  190.     }
  191.     else
  192.         cont = form_Keybd (w->handle, d_ptr->tree, d_ptr->edit_obj, mk->kstate, &d_ptr->next_obj, &kr);
  193.  
  194.     if (kr)
  195.     {
  196.         obj_edit (d_ptr->tree, d_ptr->edit_obj, mk->kstate, kr, &d_ptr->edit_idx, EDCHAR, FALSE, &d_ptr->edit_obj, w->handle);
  197.         d_ptr->next_obj = d_ptr->edit_obj;
  198.     }
  199.     else
  200.     {    
  201.         if ((d_ptr->tree[d_ptr->edit_obj].ob_flags & EXIT) && d_ptr->edit_obj != d_ptr->next_obj && cont)
  202.         {
  203.             d_ptr->next_obj = d_ptr->edit_obj;
  204.             cont = d_ptr->edit_obj = FALSE;
  205.         }
  206.     }
  207.     if ((!cont) || ((d_ptr->next_obj != 0) && (d_ptr->next_obj != d_ptr->edit_obj)))
  208.         obj_edit(d_ptr->tree, d_ptr->edit_obj, mk->kstate, 0, &d_ptr->edit_idx, EDEND, FALSE, &d_ptr->edit_obj, w->handle);
  209.     if (!cont)
  210.     {
  211.         d_ptr->exit_obj = d_ptr->next_obj;
  212.         (VOID) d_ptr->proc(spec);
  213.     }
  214.     else
  215.     {
  216.         /* position cursor on    the selected editing field */
  217.         if ((d_ptr->next_obj != 0) && (d_ptr->edit_obj != d_ptr->next_obj))
  218.         {
  219.               d_ptr->edit_obj = d_ptr->next_obj;
  220.               d_ptr->next_obj = 0;
  221.               obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDINIT, FALSE, &d_ptr->edit_obj, w->handle);
  222.         }
  223.     }
  224.     return TRUE;
  225. }
  226.  
  227. LOCAL VOID wi_draw(WINDOWP w, CONST RECT *r)
  228. {
  229.     DIALP    d_ptr;
  230.     RECT    r1;
  231.     
  232.     d_ptr = get_dial(w->link);
  233.     r1 = w->work;
  234.     if (myrc_intersect(r, &r1))
  235.         objc_draw (d_ptr->tree, ROOT, MAX_DEPTH, r1.x, r1.y, r1.w, r1.h);
  236. }
  237.  
  238. LOCAL VOID wi_top(WINDOWP w)
  239. {
  240.     DIALP    d_ptr;
  241.  
  242.     d_ptr = get_dial(w->link);
  243.     obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDINIT, FALSE,
  244.                 &d_ptr->edit_obj, w->handle);
  245. }
  246.  
  247. LOCAL VOID wi_ontop(WINDP w)
  248. {
  249.     DIALP    spec;
  250.     
  251.     d_ptr = get_dial(w->link);
  252.     obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDINIT, FALSE,
  253.                 &d_ptr->edit_obj, w->handle);
  254. }
  255.  
  256. LOCAL VOID wi_untop(WINDP w)
  257. {
  258.     DIALP    d_ptr;
  259.     
  260.     d_ptr = get_dial(w->link);
  261.     obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDEND, FALSE,
  262.                 &d_ptr->edit_obj, w->handle);
  263. }
  264.  
  265. LOCAL VOID wi_bottom(WINDOWP w)
  266. {
  267.     DIALP    d_ptr;
  268.  
  269.     d_ptr = get_dial(w->link;
  270.     obj_edit(d_ptr->tree, d_ptr->edit_obj, 0, 0, &d_ptr->edit_idx, EDEND, FALSE,
  271.                 &d_ptr->edit_obj, w->handle);
  272. }
  273.  
  274. LOCAL VOID wi_close(WINDOWP w)
  275. {
  276.     DIALP    d_ptr;
  277.     
  278.     d_ptr = get_dial(w->link);
  279.     {
  280.         /* Rahmen wieder anschalten */
  281.         if (planes == 1)        
  282.             d_ptr->tree[0].ob_spec.obspec.framesize = d_ptr->save_frame;
  283.         else
  284.             dial_3Droot(TRUE, TRUE);
  285.     
  286.         /* Position wieder korrigieren */
  287.         if (d_ptr->title_obj != -1)
  288.         {
  289.             d_ptr->tree[0].ob_y += d_ptr->wdelta;
  290.             undo_flags(d_ptr->tree, d_ptr->title_obj, HIDETREE);
  291.         }
  292.         destruct_dial(w->link);
  293.         destruct_window(w);
  294.     }
  295. }
  296.  
  297. /***************************************************************************/
  298. /* Kreieren eines Fensters                                                                 */
  299. /***************************************************************************/
  300.  
  301. LOCAL VOID crt_wdial(WORD icon, WINDP window)
  302. {
  303.     window->flags        = FLAGS;
  304.     window->draw        = wi_draw;
  305.     window->click        = wi_click;
  306.     window->unclick    = wi_unclick;
  307.     window->key         = wi_key;
  308.     window->top            = wi_top;
  309.     window->ontop        = wi_ontop;
  310.     window->untop        = wi_untop;
  311.     window->bottom        = wi_bottom;
  312.     window->close        = wi_close;
  313.     window->mousenum    = ARROW;
  314. } /* crt_dial */
  315.  
  316. LOCAL    BOOLEAN win_avail(VOID)
  317. {
  318.     WORD         h;
  319.     BOOLEAN    ok;
  320.     
  321.     h = wind_create(KIND, 0,0,0,0);
  322.     ok = (h > 0);
  323.     wind_delete(h);
  324.     return ok;
  325. }
  326.  
  327. GLOBAL VOID openWDial(OBJECT *tree, WDIAL_CB proc, WORD start_obj)
  328. {
  329.     DIALP        d_ptr;
  330.     
  331.     d_ptr = search_dial(tree);
  332.     if (d_ptr != NULL)
  333.         
  334.     dial = (DIALP) malloc(sizeof(DIAL));
  335.     if (dial != NULL)
  336.     {
  337.         dial_center(tree);
  338.         dial->tree = tree;
  339.         dial->leave_dial = FALSE;
  340.         dial->start_obj = start_obj;
  341.         dial->proc = proc;
  342.                 
  343.         if (win_avail())
  344.         {
  345.             UBYTE winName[256];
  346.             
  347.             if ((dial->win = create_window(KIND, CLASS_DIALOG, -1, crt_wdial))==NULL)
  348.                 return;
  349.         
  350.             dial->title_obj = find_xobj(tree, 19);         /* Titel-Zeile suchen */
  351.             if (dial->title_obj >= 0)
  352.                 objc_getstring(tree, dial->title_obj, (BYTE *)winName);
  353.             else
  354.             {
  355.                 dial->title_obj = find_xobj(tree, 17);     /* kein Titel, dann eben die Flugecke */
  356.                 strcpy(winName, "**** Panne ****");
  357.             }
  358.             
  359.             /* Rahmendicke merken und abschalten */
  360.             if (planes == 1)
  361.             {
  362.                 dial->save_frame = dial->tree[0].ob_spec.obspec.framesize;
  363.                 dial->tree[0].ob_spec.obspec.framesize = 0;
  364.             }
  365.             else
  366.                 dial_3Droot(FALSE, FALSE);
  367.                     
  368.             dial->win->work.x = tree[0].ob_x;
  369.             dial->win->work.y = tree[0].ob_y;
  370.         
  371.             /* Titel und Flugecke nicht mitzeichnen */
  372.             if (dial->title_obj != -1)
  373.             {
  374.                 dial->wdelta = (tree[dial->title_obj].ob_y + tree[dial->title_obj].ob_height);
  375.                 tree[0].ob_y -= dial->wdelta;
  376.                 do_flags(tree, dial->title_obj, HIDETREE);
  377.             }
  378.             else
  379.                 dial->wdelta = 0;
  380.             
  381.             dial->win->work.w        = tree[0].ob_width;
  382.             dial->win->work.h        = tree[0].ob_height - dial->wdelta;
  383.             dial->draw_start        = ROOT;
  384.             dial->draw_depth        = MAX_DEPTH;
  385.             /* Damit man auch über die WINDOW-Struktur an die Dial-Daten kommt: */
  386.             dial->win->special    = dial;        
  387.  
  388.             set_wname(dial->win, winName);
  389.  
  390.             Arrow_mouse();
  391. /*            enable_menu(FALSE);*/
  392.             dial->next_obj = fm_inifld (dial->tree, dial->start_obj);
  393.             dial->edit_obj = 0;
  394.             open_window(dial->win);
  395.             /* position cursor on the selected editing field */
  396.             if ((dial->next_obj != 0) && (dial->edit_obj != dial->next_obj))
  397.             {
  398.                   dial->edit_obj = dial->next_obj;
  399.                   dial->next_obj = 0;
  400.                   obj_edit(dial->tree, dial->edit_obj, 0, 0, &dial->edit_idx, EDINIT, FALSE, &dial->edit_obj, dial->win->handle);
  401.             }
  402.         }
  403.         else    /* normaler Mydial */
  404.         {
  405.             /* nix zu tun? */
  406.         }
  407.     }
  408. }
  409.  
  410.  
  411.  
  412. #if 0
  413. LOCAL BOOLEAN default_exit(DIALP d)
  414. {
  415.     if (d != NULL)
  416.     {
  417.         undo_state(d->tree, d->exit_obj, SELECTED);
  418.         deleteDial(d);
  419.     }
  420.     return TRUE;
  421. }
  422.  
  423.  
  424. GLOBAL DIALP newDial(OBJECT *tree, BOOLEAN (*exit_proc)(DIALP window), WORD def)
  425. {
  426.     DIALP        dial;
  427.     
  428.     dial = (DIALP) malloc(sizeof(DIAL));
  429.     if (dial != NULL)
  430.     {
  431.         dial_center(tree);
  432.         dial->tree = tree;
  433.         dial->leave_dial = FALSE;
  434.         dial->start_obj = def;
  435.         dial->exit_proc = exit_proc;
  436.                 
  437.         if (use_wdial && win_avail())
  438.         {
  439.             UBYTE winName[256];
  440.             
  441.             if ((dial->win = create_window(KIND, CLASS_DIALOG, -1, crt_wdial))==NULL)
  442.                 return NULL;
  443.         
  444.             dial->title_obj = find_xobj(tree, 19);         /* Titel-Zeile suchen */
  445.             if (dial->title_obj >= 0)
  446.                 objc_getstring(tree, dial->title_obj, (BYTE *)winName);
  447.             else
  448.             {
  449.                 dial->title_obj = find_xobj(tree, 17);     /* kein Titel, dann eben die Flugecke */
  450.                 strcpy(winName, "**** Panne ****");
  451.             }
  452.             
  453.             /* Rahmendicke merken und abschalten */
  454.             if (planes == 1)
  455.             {
  456.                 dial->save_frame = dial->tree[0].ob_spec.obspec.framesize;
  457.                 dial->tree[0].ob_spec.obspec.framesize = 0;
  458.             }
  459.             else
  460.                 dial_3Droot(FALSE, FALSE);
  461.                     
  462.             dial->win->work.x = tree[0].ob_x;
  463.             dial->win->work.y = tree[0].ob_y;
  464.         
  465.             /* Titel und Flugecke nicht mitzeichnen */
  466.             if (dial->title_obj != -1)
  467.             {
  468.                 dial->wdelta = (tree[dial->title_obj].ob_y + tree[dial->title_obj].ob_height);
  469.                 tree[0].ob_y -= dial->wdelta;
  470.                 do_flags(tree, dial->title_obj, HIDETREE);
  471.             }
  472.             else
  473.                 dial->wdelta = 0;
  474.             
  475.             dial->win->work.w        = tree[0].ob_width;
  476.             dial->win->work.h        = tree[0].ob_height - dial->wdelta;
  477.             dial->draw_start        = ROOT;
  478.             dial->draw_depth        = MAX_DEPTH;
  479.             /* Damit man auch über die WINDOW-Struktur an die Dial-Daten kommt: */
  480.             dial->win->special    = dial;        
  481.  
  482.             set_wname(dial->win, winName);
  483.         }
  484.         else    /* normaler Mydial */
  485.         {
  486.             /* nix zu tun? */
  487.         }
  488.     } /* if != NULL */
  489.     return dial;
  490. }
  491.  
  492. GLOBAL VOID openDial(DIALP d)
  493. {
  494.     if (d != NULL)
  495.     {
  496.         if (use_wdial)
  497.         {
  498.             Arrow_mouse();
  499.             enable_menu(FALSE);
  500.             wdial_is_open++;
  501.             d->next_obj = fm_inifld (d->tree, d->start_obj);
  502.             d->edit_obj = 0;
  503.             open_window(d->win);
  504.             /* position cursor on the selected editing field */
  505.             if ((d->next_obj != 0) && (d->edit_obj != d->next_obj))
  506.             {
  507.                   d->edit_obj = d->next_obj;
  508.                   d->next_obj = 0;
  509.                   obj_edit(d->tree, d->edit_obj, 0, 0, &d->edit_idx, EDINIT, FALSE, &d->edit_obj, d->win->handle);
  510.             }
  511.         }
  512.         else
  513.         {
  514.             BOOLEAN    leave_dial = FALSE;
  515.             
  516.             Arrow_mouse();
  517.             open_dial(d->tree, FALSE, NULL, &(d->dial));
  518.             dial_draw(&(d->dial));
  519.             while (!leave_dial)
  520.             {
  521.                 d->exit_obj = dial_do(&(d->dial), &d->start_obj);
  522.                 leave_dial = d->exit_proc(d);
  523.             } 
  524.         }
  525.     }
  526. }
  527.  
  528. GLOBAL VOID deleteDial(DIALP d)
  529. {
  530.     if (d != NULL)
  531.     {
  532.         if (use_wdial)
  533.         {
  534.             /* Rahmen wieder anschalten */
  535.             if (planes == 1)        
  536.                 d->tree[0].ob_spec.obspec.framesize = d->save_frame;
  537.             else
  538.                 dial_3Droot(TRUE, TRUE);
  539.         
  540.             /* Position wieder korrigieren */
  541.             if (d->title_obj != -1)
  542.             {
  543.                 d->tree[0].ob_y += d->wdelta;
  544.                 undo_flags(d->tree, d->title_obj, HIDETREE);
  545.             }
  546.             destruct_window(d->win);
  547.             free(d);
  548.             enable_menu(TRUE);
  549.             wdial_is_open--;
  550.             if (wdial_is_open < 0)
  551.                 form_alert(1,"[1][wdial_is_open < 0!!!][OK]");
  552.         }
  553.         else
  554.         {
  555.             dial_end(&(d->dial));
  556.             free(d);
  557.             Last_mouse();
  558.         }
  559.         d = NULL;
  560.     }
  561. }
  562.  
  563. GLOBAL VOID simpleDial(OBJECT *tree)
  564. {
  565.     DIALP    dial;
  566.     
  567.     dial = newDial(tree, default_exit, 0);
  568.     if (dial != NULL)
  569.     {
  570.         if (use_wdial)
  571.             openDial(dial);
  572.         else
  573.             HndlDial(tree, 0, TRUE, NULL, NULL);
  574.     }
  575. }
  576.  
  577. GLOBAL VOID drawDial(DIALP d, WORD start_obj, WORD depth)
  578. {
  579.     if (d != NULL)
  580.     {
  581.         if (use_wdial)
  582.         {
  583.             d->draw_start = start_obj;
  584.             d->draw_depth = depth;
  585.             redraw_window(d->win, &d->win->work);
  586.             d->draw_start = ROOT;
  587.             d->draw_depth = MAX_DEPTH;
  588.         }
  589.         else
  590.         {
  591.             objc_draw(d->tree, start_obj, depth, d->dial.x, d->dial.y, d->dial.w, d->dial.h);
  592.         }
  593.     }
  594. }
  595.  
  596. GLOBAL VOID    deselBtn(DIALP d, WORD btn)
  597. {
  598.     if (d != NULL)
  599.     {
  600.         undo_state(d->tree, btn, SELECTED);
  601.         drawDial(d, btn, 1);
  602.     }
  603. }
  604. #endif
  605. #endif